package edu.scau.mis.pos.mapper;


import edu.scau.mis.pos.domain.Order;
import edu.scau.mis.pos.domain.OrderItem;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface OrderMapper {

    // 分页查询订单列表
    List<Order> selectOrderList(@Param("orderId") String orderId,
                                @Param("payType") String payType,
                                @Param("startTime") String startTime,
                                @Param("endTime") String endTime,
                                @Param("status") Integer status,
                                @Param("offset") int offset,
                                @Param("pageSize") int pageSize);

    // 查询符合条件的订单数量
    int countOrderList(@Param("orderId") String orderId,
                       @Param("payType") String payType,
                       @Param("startTime") String startTime,
                       @Param("endTime") String endTime,
                       @Param("status") Integer status);

    // 根据订单号查询订单基本信息
    Order selectOrderById(@Param("orderId") String orderId);

    // 根据订单号查询订单明细列表
    List<OrderItem> selectOrderItemsByOrderId(@Param("orderId") String orderId);

    // 修改订单（金额和状态）
    int updateOrder(Order order);

    // 删除单个订单
    int deleteOrder(@Param("orderId") String orderId);

    // 删除单个订单的所有明细
    int deleteOrderItems(@Param("orderId") String orderId);

    // 退货：将订单金额改为0，订单状态改为已退款
    int refundOrder(@Param("orderId") String orderId);

    // 换货：将订单状态改为换货中（插入换货表在service做）
    int changeOrder(@Param("orderId") String orderId);

    // 修改订单状态
    int updateOrderStatus(@Param("orderId") String orderId, @Param("status") Integer status);

    int insert(Order order);

    OrderItem selectOrderItemInfoBySkuCode(String skuCode);

    int insertOrderItems(@Param("orderId") String orderId, @Param("list") List<OrderItem> items);

    int updateOrderById(Order order);

    // 更新订单明细中的总价、件数、原价等
    int updateOrderPriceAndQuantity(@Param("orderId") String orderId);

    Order getOrderById(String orderId);
}